Parte 1: Importando os arquivos de dados

carteira <- readr::read_rds("dados/carteira.rds")
risco <- readxl::read_xlsx('dados/risco.xlsx')
cotacoes <- readr::read_rds('dados/cotacoes.rds')

Visão geral da estrutura de dados

dplyr::glimpse(carteira)
## Rows: 3,529
## Columns: 3
## $ VALE     <dbl> NA, 0.0172102476, 0.0824816167, -0.0221424526, -0.0582752221,…
## $ WEGE3.SA <dbl> NA, 0.028168914, 0.004931529, -0.018538688, -0.002777568, -0.…
## $ PETR4.SA <dbl> NA, -0.001435125, 0.048850959, -0.016438432, -0.038718922, -0…
dplyr::glimpse(risco)
## Rows: 21
## Columns: 8
## $ q1_1 <chr> "41-50 anos", "41-50 anos", "31-40 anos", "31-40 anos", "31-40 an…
## $ q1_2 <chr> "Feminino", "Masculino", "Masculino", "Feminino", "Masculino", "F…
## $ q1_3 <chr> "Técnico Administrativo", "Técnico Administrativo", "Técnico Admi…
## $ q1_4 <chr> "Diretoria Executiva de Desenvolvimento Insttucional", "Coordenad…
## $ q1_5 <chr> "Mestrado", "Mestrado", "Mestrado", "Especialização", "Mestrado",…
## $ q1_6 <chr> "11-15 anos", "6-10 anos", "6-10 anos", "6-10 anos", "6-10 anos",…
## $ q1_7 <chr> "Até 5 anos", "6-10 anos", "Até 5 anos", "6-10 anos", "6-10 anos"…
## $ q1_8 <chr> "Sim", "Não", "Sim", "Sim", "Sim", NA, "Sim", "Sim", "Não", "Sim"…
dplyr::glimpse(cotacoes)
## Rows: 5,590
## Columns: 18
## $ item    <int> 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,…
## $ ano     <fct> 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 2018, 20…
## $ pe      <fct> Bens imoveis, Bens imoveis, Bens imoveis, Bens imoveis, Bens i…
## $ ve      <dbl> 34.57, 67.17, 48.65, 52.33, 20.67, 165.30, 1.68, 9.03, 5.38, 7…
## $ vh      <dbl> 0.00, 53.87, 45.07, 52.33, 19.30, 149.10, 0.00, 9.03, 5.38, 5.…
## $ percent <dbl> -1.00, -0.20, -0.07, 0.00, -0.07, -0.10, -1.00, 0.00, 0.00, -0…
## $ x3c     <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…
## $ x2c     <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ it      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ cb      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 1,…
## $ fn      <int> 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0,…
## $ pa      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ cc      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ ds      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ pt      <int> 9, 12, 11, 9, 10, 6, 1, 1, 3, 10, 2, 8, 2, 2, 2, 10, 9, 3, 9, …
## $ inst    <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ re      <int> 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,…
## $ lc      <int> 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,…

Verificando a classe dos objetos

class(carteira)
## [1] "tbl_df"     "tbl"        "data.frame"
class(risco)
## [1] "tbl_df"     "tbl"        "data.frame"
class(cotacoes)
## [1] "tbl_df"     "tbl"        "data.frame"

Inspecionando o objeto

head(carteira)
## # A tibble: 6 × 3
##      VALE WEGE3.SA PETR4.SA
##     <dbl>    <dbl>    <dbl>
## 1 NA      NA       NA      
## 2  0.0172  0.0282  -0.00144
## 3  0.0825  0.00493  0.0489 
## 4 -0.0221 -0.0185  -0.0164 
## 5 -0.0583 -0.00278 -0.0387 
## 6 -0.0679 -0.0195  -0.0469
head(risco)
## # A tibble: 6 × 8
##   q1_1       q1_2      q1_3                   q1_4       q1_5  q1_6  q1_7  q1_8 
##   <chr>      <chr>     <chr>                  <chr>      <chr> <chr> <chr> <chr>
## 1 41-50 anos Feminino  Técnico Administrativo Diretoria… Mest… 11-1… Até … Sim  
## 2 41-50 anos Masculino Técnico Administrativo Coordenad… Mest… 6-10… 6-10… Não  
## 3 31-40 anos Masculino Técnico Administrativo Diretor d… Mest… 6-10… Até … Sim  
## 4 31-40 anos Feminino  Técnico Administrativo Assistent… Espe… 6-10… 6-10… Sim  
## 5 31-40 anos Masculino Técnico Administrativo Administr… Mest… 6-10… 6-10… Sim  
## 6 51-60 anos Feminino  Técnico Administrativo auditor    Mest… 11-1… 6-10… <NA>
head(cotacoes)
## # A tibble: 6 × 18
##    item ano   pe            ve    vh percent   x3c   x2c    it    cb    fn    pa
##   <int> <fct> <fct>      <dbl> <dbl>   <dbl> <int> <int> <int> <int> <int> <int>
## 1     1 2018  Bens imov…  34.6   0     -1        1     0     0     0     0     0
## 2     2 2018  Bens imov…  67.2  53.9   -0.2      1     0     0     0     1     0
## 3     3 2018  Bens imov…  48.6  45.1   -0.07     1     0     0     0     1     0
## 4     4 2018  Bens imov…  52.3  52.3    0        1     0     0     0     1     0
## 5     5 2018  Bens imov…  20.7  19.3   -0.07     1     0     0     0     1     0
## 6     6 2018  Bens imov… 165.  149.    -0.1      1     0     0     0     1     0
## # ℹ 6 more variables: cc <int>, ds <int>, pt <int>, inst <int>, re <int>,
## #   lc <int>

Parte 2: Estatísticas Descritivas dos Dados Importados

Função summary()

Retornos da carteira:

summary(carteira)
##       VALE             WEGE3.SA           PETR4.SA       
##  Min.   :-0.23803   Min.   :-0.20620   Min.   :-0.29698  
##  1st Qu.:-0.01634   1st Qu.:-0.01031   1st Qu.:-0.01438  
##  Median : 0.00044   Median : 0.00045   Median : 0.00000  
##  Mean   : 0.00062   Mean   : 0.00108   Mean   : 0.00058  
##  3rd Qu.: 0.01650   3rd Qu.: 0.01206   3rd Qu.: 0.01454  
##  Max.   : 0.28441   Max.   : 0.13894   Max.   : 0.22222  
##  NA's   :84         NA's   :135        NA's   :135

Gestão de Risco - Questionário:

summary(risco)
##      q1_1               q1_2               q1_3               q1_4          
##  Length:21          Length:21          Length:21          Length:21         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##      q1_5               q1_6               q1_7               q1_8          
##  Length:21          Length:21          Length:21          Length:21         
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character

Tipos de Cotações

summary(cotacoes)
##       item        ano                  pe             ve          
##  Min.   :   1   2018:1601   eletrico    :1140   Min.   :     0.0  
##  1st Qu.:1398   2019:1591   Bens imoveis:1093   1st Qu.:     8.9  
##  Median :2796   2020:2398   expediente  : 543   Median :    28.3  
##  Mean   :2796               laboratorial: 535   Mean   :  1340.3  
##  3rd Qu.:4193               medicao     : 451   3rd Qu.:   105.2  
##  Max.   :5591               Esportivo   : 413   Max.   :428390.0  
##                             (Other)     :1415                     
##        vh              percent             x3c              x2c         
##  Min.   :     0.0   Min.   :-1.0000   Min.   :0.0000   Min.   :0.00000  
##  1st Qu.:     0.6   1st Qu.:-0.7500   1st Qu.:1.0000   1st Qu.:0.00000  
##  Median :     9.6   Median :-0.3750   Median :1.0000   Median :0.00000  
##  Mean   :   701.5   Mean   :-0.4262   Mean   :0.9562   Mean   :0.04526  
##  3rd Qu.:    41.1   3rd Qu.:-0.0600   3rd Qu.:1.0000   3rd Qu.:0.00000  
##  Max.   :378000.0   Max.   :16.0700   Max.   :1.0000   Max.   :1.00000  
##                                                                         
##        it               cb               fn              pa         
##  Min.   :0.0000   Min.   :0.0000   Min.   :0.000   Min.   :0.00000  
##  1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.000   1st Qu.:0.00000  
##  Median :1.0000   Median :0.0000   Median :0.000   Median :0.00000  
##  Mean   :0.5379   Mean   :0.1546   Mean   :0.237   Mean   :0.05564  
##  3rd Qu.:1.0000   3rd Qu.:0.0000   3rd Qu.:0.000   3rd Qu.:0.00000  
##  Max.   :1.0000   Max.   :1.0000   Max.   :1.000   Max.   :1.00000  
##                                                                     
##        cc               ds                pt              inst      
##  Min.   :0.0000   Min.   :0.00000   Min.   : 0.000   Min.   :0.000  
##  1st Qu.:0.0000   1st Qu.:0.00000   1st Qu.: 2.000   1st Qu.:0.000  
##  Median :0.0000   Median :0.00000   Median : 4.000   Median :0.000  
##  Mean   :0.1474   Mean   :0.06547   Mean   : 4.687   Mean   :0.471  
##  3rd Qu.:0.0000   3rd Qu.:0.00000   3rd Qu.: 6.000   3rd Qu.:1.000  
##  Max.   :1.0000   Max.   :1.00000   Max.   :30.000   Max.   :1.000  
##                                                                     
##        re               lc        
##  Min.   :0.0000   Min.   :0.0000  
##  1st Qu.:0.0000   1st Qu.:0.0000  
##  Median :0.0000   Median :0.0000  
##  Mean   :0.2612   Mean   :0.2669  
##  3rd Qu.:1.0000   3rd Qu.:1.0000  
##  Max.   :1.0000   Max.   :1.0000  
## 

Função skimr::skim()

Retornos da carteira:

skimr::skim(carteira)
Data summary
Name carteira
Number of rows 3529
Number of columns 3
_______________________
Column type frequency:
numeric 3
________________________
Group variables None

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
VALE 84 0.98 0 0.03 -0.24 -0.02 0 0.02 0.28 ▁▁▇▁▁
WEGE3.SA 135 0.96 0 0.02 -0.21 -0.01 0 0.01 0.14 ▁▁▇▇▁
PETR4.SA 135 0.96 0 0.03 -0.30 -0.01 0 0.01 0.22 ▁▁▇▂▁

Gestão de Risco - Questionário:

skimr::skim(risco)
Data summary
Name risco
Number of rows 21
Number of columns 8
_______________________
Column type frequency:
character 8
________________________
Group variables None

Variable type: character

skim_variable n_missing complete_rate min max empty n_unique whitespace
q1_1 0 1.00 10 10 0 3 0
q1_2 0 1.00 8 9 0 2 0
q1_3 0 1.00 7 22 0 2 0
q1_4 2 0.90 7 87 0 18 0
q1_5 0 1.00 8 14 0 2 0
q1_6 0 1.00 9 15 0 4 0
q1_7 0 1.00 9 15 0 4 0
q1_8 1 0.95 3 3 0 2 0

Tipos de Cotações:

skimr::skim(cotacoes)
Data summary
Name cotacoes
Number of rows 5590
Number of columns 18
_______________________
Column type frequency:
factor 2
numeric 16
________________________
Group variables None

Variable type: factor

skim_variable n_missing complete_rate ordered n_unique top_counts
ano 0 1 FALSE 3 202: 2398, 201: 1601, 201: 1591
pe 0 1 FALSE 10 ele: 1140, Ben: 1093, exp: 543, lab: 535

Variable type: numeric

skim_variable n_missing complete_rate mean sd p0 p25 p50 p75 p100 hist
item 0 1 2795.72 1614.14 1.00 1398.25 2795.50 4192.75 5591.00 ▇▇▇▇▇
ve 0 1 1340.27 15681.23 0.02 8.89 28.34 105.16 428390.00 ▇▁▁▁▁
vh 0 1 701.48 11229.15 0.00 0.55 9.56 41.09 378000.00 ▇▁▁▁▁
percent 0 1 -0.43 0.48 -1.00 -0.75 -0.38 -0.06 16.07 ▇▁▁▁▁
x3c 0 1 0.96 0.20 0.00 1.00 1.00 1.00 1.00 ▁▁▁▁▇
x2c 0 1 0.05 0.21 0.00 0.00 0.00 0.00 1.00 ▇▁▁▁▁
it 0 1 0.54 0.50 0.00 0.00 1.00 1.00 1.00 ▇▁▁▁▇
cb 0 1 0.15 0.36 0.00 0.00 0.00 0.00 1.00 ▇▁▁▁▂
fn 0 1 0.24 0.43 0.00 0.00 0.00 0.00 1.00 ▇▁▁▁▂
pa 0 1 0.06 0.23 0.00 0.00 0.00 0.00 1.00 ▇▁▁▁▁
cc 0 1 0.15 0.35 0.00 0.00 0.00 0.00 1.00 ▇▁▁▁▂
ds 0 1 0.07 0.25 0.00 0.00 0.00 0.00 1.00 ▇▁▁▁▁
pt 0 1 4.69 3.06 0.00 2.00 4.00 6.00 30.00 ▇▂▁▁▁
inst 0 1 0.47 0.50 0.00 0.00 0.00 1.00 1.00 ▇▁▁▁▇
re 0 1 0.26 0.44 0.00 0.00 0.00 1.00 1.00 ▇▁▁▁▃
lc 0 1 0.27 0.44 0.00 0.00 0.00 1.00 1.00 ▇▁▁▁▃

Parte 3: Preparando os dados para análise

  • Retornos da carteira: retirando dados faltantes
carteira_analise <- na.omit(carteira)
summary(carteira_analise)
##       VALE               WEGE3.SA             PETR4.SA         
##  Min.   :-0.2380303   Min.   :-0.2061975   Min.   :-0.2969777  
##  1st Qu.:-0.0161553   1st Qu.:-0.0102900   1st Qu.:-0.0145569  
##  Median : 0.0003861   Median : 0.0005578   Median : 0.0000000  
##  Mean   : 0.0007789   Mean   : 0.0011484   Mean   : 0.0006453  
##  3rd Qu.: 0.0166091   3rd Qu.: 0.0122094   3rd Qu.: 0.0147556  
##  Max.   : 0.2844115   Max.   : 0.1389445   Max.   : 0.2222221

Criando uma estrutura de dados longer

carteira_analise_longer <- carteira_analise %>% 
      tidyr::pivot_longer(cols = c('VALE', 'WEGE3.SA', 'PETR4.SA'), 
                          names_to = "acoes", 
                          values_to = "retornos")

head(carteira_analise_longer)
## # A tibble: 6 × 2
##   acoes    retornos
##   <chr>       <dbl>
## 1 VALE      0.0172 
## 2 WEGE3.SA  0.0282 
## 3 PETR4.SA -0.00144
## 4 VALE      0.0825 
## 5 WEGE3.SA  0.00493
## 6 PETR4.SA  0.0489
  • Risco: Definindo classes apropriadas para as questões:
risco_analise <- risco %>%
  transmute(
    q1_1 = factor(
      q1_1,
      levels = c(
        "20-30 anos",
        "31-40 anos",
        "41-50 anos",
        "51-60 anos",
        "Mais de 60 anos"
      ),
      ordered = TRUE
    ),
    q1_2 = factor(q1_2),
    q1_3 = factor(q1_3),
    q1_4 = factor(q1_4),
    q1_5 = factor(
      q1_5,
      levels =  c(
        "Ensino fundamental",
        "Ensino médio",
        "Ensino superior",
        "Especialização",
        "Mestrado",
        "Doutorado"
      ),
      ordered = TRUE
    ),
    q1_6 = factor(
      q1_6,
      levels = c(
        "Até 5 anos",
        "6-10 anos",
        "11-15 anos",
        "16-20 anos",
        "Mais de 20 anos"
      ),
      ordered = TRUE
    ),
    q1_7 = factor(
      q1_7,
      levels = c(
        "Até 5 anos",
        "6-10 anos",
        "11-15 anos",
        "16-20 anos",
        "Mais de 20 anos"
      ),
      ordered = TRUE
    ),
    q1_8 = factor(q1_8)
  )

Verificando o novo objeto `risco_analise``:

skimr::skim(risco_analise)
Data summary
Name risco_analise
Number of rows 21
Number of columns 8
_______________________
Column type frequency:
factor 8
________________________
Group variables None

Variable type: factor

skim_variable n_missing complete_rate ordered n_unique top_counts
q1_1 0 1.00 TRUE 3 31-: 12, 41-: 7, 51-: 2, 20-: 0
q1_2 0 1.00 FALSE 2 Mas: 12, Fem: 9
q1_3 0 1.00 FALSE 2 Téc: 20, Doc: 1
q1_4 2 0.90 FALSE 18 Dir: 2, Adm: 1, Adm: 1, Ass: 1
q1_5 0 1.00 TRUE 2 Mes: 14, Esp: 7, Ens: 0, Ens: 0
q1_6 0 1.00 TRUE 4 6-1: 9, 11-: 9, 16-: 2, Mai: 1
q1_7 0 1.00 TRUE 4 Até: 13, 6-1: 6, 11-: 1, Mai: 1
q1_8 1 0.95 FALSE 2 Sim: 17, Não: 3

Parte 4: Estatísticas Descritivas

  • Retornos da carteira: dados numéricos
fBasics::basicStats(carteira_analise)
##                    VALE    WEGE3.SA    PETR4.SA
## nobs        3311.000000 3311.000000 3311.000000
## NAs            0.000000    0.000000    0.000000
## Minimum       -0.238030   -0.206198   -0.296978
## Maximum        0.284411    0.138944    0.222222
## 1. Quartile   -0.016155   -0.010290   -0.014557
## 3. Quartile    0.016609    0.012209    0.014756
## Mean           0.000779    0.001148    0.000645
## Median         0.000386    0.000558    0.000000
## Sum            2.578996    3.802362    2.136589
## SE Mean        0.000564    0.000375    0.000520
## LCL Mean      -0.000327    0.000413   -0.000374
## UCL Mean       0.001885    0.001884    0.001664
## Variance       0.001054    0.000465    0.000894
## Stdev          0.032468    0.021574    0.029902
## Skewness       0.283139   -0.317256   -0.266338
## Kurtosis       6.665432    6.956479    8.008591
  • Gestão de Risco: dados categóricos
summary(risco_analise)
##               q1_1           q1_2                        q1_3   
##  20-30 anos     : 0   Feminino : 9   Docente               : 1  
##  31-40 anos     :12   Masculino:12   Técnico Administrativo:20  
##  41-50 anos     : 7                                             
##  51-60 anos     : 2                                             
##  Mais de 60 anos: 0                                             
##                                                                 
##                                                                 
##                                                                                       q1_4   
##  Diretora de Desenvolvimento Institucional                                              : 2  
##  Administrador                                                                          : 1  
##  Administrador, Diretor de Desenvolvimento Institucional                                : 1  
##  Assistente em Administração | Ouvidora | Presidente da Unidade de Gestão da Integridade: 1  
##  auditor                                                                                : 1  
##  (Other)                                                                                :13  
##  NA's                                                                                   : 2  
##                  q1_5                 q1_6                q1_7      q1_8   
##  Ensino fundamental: 0   Até 5 anos     :0   Até 5 anos     :13   Não : 3  
##  Ensino médio      : 0   6-10 anos      :9   6-10 anos      : 6   Sim :17  
##  Ensino superior   : 0   11-15 anos     :9   11-15 anos     : 1   NA's: 1  
##  Especialização    : 7   16-20 anos     :2   16-20 anos     : 0            
##  Mestrado          :14   Mais de 20 anos:1   Mais de 20 anos: 1            
##  Doutorado         : 0                                                     
## 
  • Gestão de Risco: dados categóricos
summary(cotacoes)
##       item        ano                  pe             ve          
##  Min.   :   1   2018:1601   eletrico    :1140   Min.   :     0.0  
##  1st Qu.:1398   2019:1591   Bens imoveis:1093   1st Qu.:     8.9  
##  Median :2796   2020:2398   expediente  : 543   Median :    28.3  
##  Mean   :2796               laboratorial: 535   Mean   :  1340.3  
##  3rd Qu.:4193               medicao     : 451   3rd Qu.:   105.2  
##  Max.   :5591               Esportivo   : 413   Max.   :428390.0  
##                             (Other)     :1415                     
##        vh              percent             x3c              x2c         
##  Min.   :     0.0   Min.   :-1.0000   Min.   :0.0000   Min.   :0.00000  
##  1st Qu.:     0.6   1st Qu.:-0.7500   1st Qu.:1.0000   1st Qu.:0.00000  
##  Median :     9.6   Median :-0.3750   Median :1.0000   Median :0.00000  
##  Mean   :   701.5   Mean   :-0.4262   Mean   :0.9562   Mean   :0.04526  
##  3rd Qu.:    41.1   3rd Qu.:-0.0600   3rd Qu.:1.0000   3rd Qu.:0.00000  
##  Max.   :378000.0   Max.   :16.0700   Max.   :1.0000   Max.   :1.00000  
##                                                                         
##        it               cb               fn              pa         
##  Min.   :0.0000   Min.   :0.0000   Min.   :0.000   Min.   :0.00000  
##  1st Qu.:0.0000   1st Qu.:0.0000   1st Qu.:0.000   1st Qu.:0.00000  
##  Median :1.0000   Median :0.0000   Median :0.000   Median :0.00000  
##  Mean   :0.5379   Mean   :0.1546   Mean   :0.237   Mean   :0.05564  
##  3rd Qu.:1.0000   3rd Qu.:0.0000   3rd Qu.:0.000   3rd Qu.:0.00000  
##  Max.   :1.0000   Max.   :1.0000   Max.   :1.000   Max.   :1.00000  
##                                                                     
##        cc               ds                pt              inst      
##  Min.   :0.0000   Min.   :0.00000   Min.   : 0.000   Min.   :0.000  
##  1st Qu.:0.0000   1st Qu.:0.00000   1st Qu.: 2.000   1st Qu.:0.000  
##  Median :0.0000   Median :0.00000   Median : 4.000   Median :0.000  
##  Mean   :0.1474   Mean   :0.06547   Mean   : 4.687   Mean   :0.471  
##  3rd Qu.:0.0000   3rd Qu.:0.00000   3rd Qu.: 6.000   3rd Qu.:1.000  
##  Max.   :1.0000   Max.   :1.00000   Max.   :30.000   Max.   :1.000  
##                                                                     
##        re               lc        
##  Min.   :0.0000   Min.   :0.0000  
##  1st Qu.:0.0000   1st Qu.:0.0000  
##  Median :0.0000   Median :0.0000  
##  Mean   :0.2612   Mean   :0.2669  
##  3rd Qu.:1.0000   3rd Qu.:1.0000  
##  Max.   :1.0000   Max.   :1.0000  
## 

Funções R para vetores

extraindo uma coluna da data frame:

retornos_petro <- carteira$PETR4.SA

Medidas de Posição

media amostral

mean(retornos_petro, na.rm = TRUE)
## [1] 0.0005773374

mediana amostral

median(retornos_petro, na.rm = TRUE)
## [1] 0

minimo, quartis e maximo amostrais

quantile(retornos_petro, na.rm = TRUE)
##          0%         25%         50%         75%        100% 
## -0.29697774 -0.01438195  0.00000000  0.01453912  0.22222214

percentis especificos: \(p_{32}\), \(p_{57}\) e \(p_{98}\)

quantile(retornos_petro, prob = c(.32, .57, .98), na.rm = TRUE)
##          32%          57%          98% 
## -0.009350287  0.003712789  0.067080166

minimo entre os elementos de um vetor

min(retornos_petro, na.rm = TRUE)      # mínimo dos elementos do vetor
## [1] -0.2969777

máximo dos elementos do vetor

max(retornos_petro, na.rm = TRUE) 
## [1] 0.2222221

Medidas de Variabilidade

variância amostral

var(retornos_petro, na.rm = TRUE)
## [1] 0.0008882345

desvio-padrão amostral

sd(retornos_petro, na.rm = TRUE)  
## [1] 0.02980326

desvio-absoluto mediano amostral

mad(retornos_petro, na.rm = TRUE) 
## [1] 0.02150178

intervalo interquartil amostral

IQR(retornos_petro, na.rm = TRUE) 
## [1] 0.02892107

Tabelas de Frequência: Exploratórias

Função tabyl() do pacote janitor

tab1 <- risco_analise |> tabyl(q1_1)
tab1
##             q1_1  n   percent
##       20-30 anos  0 0.0000000
##       31-40 anos 12 0.5714286
##       41-50 anos  7 0.3333333
##       51-60 anos  2 0.0952381
##  Mais de 60 anos  0 0.0000000
tab2 <- risco_analise |> tabyl(q1_2)
tab2
##       q1_2  n   percent
##   Feminino  9 0.4285714
##  Masculino 12 0.5714286
tab3 <- risco_analise |> tabyl(q1_3)
tab3
##                    q1_3  n    percent
##                 Docente  1 0.04761905
##  Técnico Administrativo 20 0.95238095

Customizando as tabelas:

tab4 <- risco_analise |> tabyl(q1_1) |> 
   adorn_totals(c("row")) |>
  adorn_pct_formatting(rounding = "half up", digits = 0) 
       
tab4
##             q1_1  n percent
##       20-30 anos  0      0%
##       31-40 anos 12     57%
##       41-50 anos  7     33%
##       51-60 anos  2     10%
##  Mais de 60 anos  0      0%
##            Total 21    100%
tab5 <- risco_analise |> tabyl(q1_2) |> 
   adorn_totals(c("row")) |>
   adorn_pct_formatting(rounding = "half up", digits = 0) 

tab5
##       q1_2  n percent
##   Feminino  9     43%
##  Masculino 12     57%
##      Total 21    100%
tab5 <- risco_analise |> tabyl(q1_3) |> 
  adorn_totals(c("row")) |>
  adorn_pct_formatting(rounding = "half up", digits = 0) 

tab5
##                    q1_3  n percent
##                 Docente  1      5%
##  Técnico Administrativo 20     95%
##                   Total 21    100%

Tabulação cruzada:

tab6 <- risco_analise |> tabyl(q1_2, q1_3)

tab6
##       q1_2 Docente Técnico Administrativo
##   Feminino       0                      9
##  Masculino       1                     11

Customizando a tabela:

tab7 <- risco_analise |> tabyl(q1_2, q1_3) |>
  adorn_percentages("row") |>
  adorn_pct_formatting(digits = 2) |>
  adorn_ns() 

tab7
##       q1_2   Docente Técnico Administrativo
##   Feminino 0.00% (0)           100.00%  (9)
##  Masculino 8.33% (1)            91.67% (11)
tab8 <- risco_analise |> 
        tabyl(q1_1, q1_2, q1_3)

tab8
## $Docente
##             q1_1 Feminino Masculino
##       20-30 anos        0         0
##       31-40 anos        0         0
##       41-50 anos        0         1
##       51-60 anos        0         0
##  Mais de 60 anos        0         0
## 
## $`Técnico Administrativo`
##             q1_1 Feminino Masculino
##       20-30 anos        0         0
##       31-40 anos        5         7
##       41-50 anos        2         4
##       51-60 anos        2         0
##  Mais de 60 anos        0         0

Tabelas para Publicação

Usando os pacotes gtsummary e flextable

Tabela: Variáveis Categóricas

# Pacote utilizado
library(gtsummary)
library(flextable)

tabgt01 <-cotacoes %>%  
  select(-c(item, ve, vh, percent, pt)) %>% 
  tbl_summary(
    by = ano,
    statistic = list(
      all_categorical() ~ "{n} ({p}%)"
    ),
    label = list(pe ~ "Grupo Licitado", 
                 it ~ "Pesquisa de Preços (internet)",
                 cb ~ "Pesquisa de Preços (combinada)",
                 fn ~ "Pesquisa de Preços (fornecedores)",
                 pa ~ "Pesquisa de Preços (painel)"
                 ),
    digits = all_continuous() ~ 2
  ) %>%
  modify_header(label ~ "**Variável**") %>%
  modify_caption("TABELA 1. Estatísticas Descritivas: Variáveis Categóricas.") %>%
  modify_footnote(all_stat_cols() ~ " N = total de observações do ano. n = (total de observações da variável categórica/nível) (%) = porcentagem do total de observações do ano")

tabgt01
TABELA 1. Estatísticas Descritivas: Variáveis Categóricas.
Variável 2018, N = 1,6011 2019, N = 1,5911 2020, N = 2,3981
Grupo Licitado
    Bens imoveis 486 (30%) 229 (14%) 378 (16%)
    eletrico 305 (19%) 584 (37%) 251 (10%)
    Esportivo 123 (7.7%) 31 (1.9%) 259 (11%)
    expediente 0 (0%) 0 (0%) 543 (23%)
    ferramentas 126 (7.9%) 51 (3.2%) 110 (4.6%)
    laboratorial 0 (0%) 332 (21%) 203 (8.5%)
    limpeza 9 (0.6%) 110 (6.9%) 269 (11%)
    medicao 106 (6.6%) 103 (6.5%) 242 (10%)
    quimico 252 (16%) 76 (4.8%) 0 (0%)
    veterinario 194 (12%) 75 (4.7%) 143 (6.0%)
x3c 1,529 (96%) 1,502 (94%) 2,314 (96%)
x2c 43 (2.7%) 152 (9.6%) 58 (2.4%)
Pesquisa de Preços (internet) 777 (49%) 524 (33%) 1,706 (71%)
Pesquisa de Preços (combinada) 283 (18%) 353 (22%) 228 (9.5%)
Pesquisa de Preços (fornecedores) 484 (30%) 425 (27%) 416 (17%)
Pesquisa de Preços (painel) 36 (2.2%) 226 (14%) 49 (2.0%)
cc 236 (15%) 215 (14%) 373 (16%)
ds 95 (5.9%) 116 (7.3%) 155 (6.5%)
inst 553 (35%) 298 (19%) 1,782 (74%)
re 705 (44%) 677 (43%) 78 (3.3%)
lc 338 (21%) 616 (39%) 538 (22%)
1 N = total de observações do ano. n = (total de observações da variável categórica/nível) (%) = porcentagem do total de observações do ano
# as_gt(tabgt01) %>% 
# gt::gtsave(filename = "tabs/tabgt01.rtf")

Tabela: Variáveis Numéricas

tabgt02 <- cotacoes %>% select(c(ano, ve, vh, percent, pt)) %>%
  tbl_summary(
    by = ano,
    statistic = list(
      all_continuous() ~ c("({median}, {mean}) ({p25}, {p75}), ({min}, {max}) ({IQR}, {sd})")
    ),
    label = list( 
      ve ~ "Valor Estimado",
      vh ~ "Valor Homologado",
      percent ~ "Variação (%)", 
      pt ~ "Total de Fornecedores Participantes"),
    digits = all_continuous() ~ 2
  ) %>%
  modify_header(label ~ "**Variável**") %>%
  modify_caption("TABELA 2. Estatísticas Descritivas: Variáveis Numéricas.") %>%
  modify_footnote(all_stat_cols() ~ "(média, mediana) (p25, p75) (mín., máx.) (IIQ, desvio_padrão)"
  )

tabgt02
TABELA 2. Estatísticas Descritivas: Variáveis Numéricas.
Variável 2018, N = 1,6011 2019, N = 1,5911 2020, N = 2,3981
Valor Estimado (31.35, 312.32) (11.26, 96.89), (0.05, 51,293.50) (85.63, 2,147.00) (24.88, 498.69) (7.48, 89.29), (0.04, 68,000.00) (81.81, 3,591.55) (28.86, 2,584.92) (8.34, 128.91), (0.02, 428,390.00) (120.57, 23,643.17)
Valor Homologado (13.90, 171.85) (0.70, 48.42), (0.00, 48,900.00) (47.72, 1,599.76) (9.39, 234.05) (0.77, 39.89), (0.00, 45,444.88) (39.12, 2,074.35) (7.73, 1,365.22) (0.49, 37.98), (0.00, 378,000.00) (37.49, 16,990.37)
Variação (%) (-0.28, -0.36) (-0.70, 0.00), (-1.00, 16.07) (0.70, 0.68) (-0.32, -0.40) (-0.70, 0.00), (-1.00, 0.17) (0.70, 0.38) (-0.45, -0.49) (-0.80, -0.20), (-1.00, 4.07) (0.60, 0.36)
Total de Fornecedores Participantes (4.00, 4.19) (2.00, 6.00), (0.00, 15.00) (4.00, 2.62) (4.00, 4.61) (2.00, 7.00), (0.00, 30.00) (5.00, 3.08) (5.00, 5.07) (3.00, 7.00), (0.00, 17.00) (4.00, 3.27)
1 (média, mediana) (p25, p75) (mín., máx.) (IIQ, desvio_padrão)
# as_gt(tabgt02) %>% 
#     gt::gtsave(filename = "tabs/tabgt02.rtf")

Visualizando distribuições

Histograma

h1 <- ggplot(carteira, aes(x = VALE)) + geom_histogram()
h1

Customizando um Histograma

h1c <- ggplot(carteira, aes(x = VALE)) +
  geom_histogram() +
  labs(x = "Retornos",
       y = "Frequência",
       title = "Vale: Retornos das Ações") + 
  xlim(-0.3, 0.3) + 
  theme_minimal()
h1c

Histograma

h2 <- ggplot(carteira, aes(x = PETR4.SA)) + geom_histogram() 
h2

Customizando:

h2c <- ggplot(carteira, aes(x = PETR4.SA)) +
  geom_histogram() +
  labs(x = "Retornos",
       y = "Frequência",
       title = "Petrobrás: Retornos das Ações") + 
  xlim(-0.3, 0.3) + 
  theme_minimal()
h2c

h3 <- ggplot(carteira, aes(x = WEGE3.SA)) + geom_histogram()
h3

Customizando

h3c <- ggplot(carteira, aes(x = WEGE3.SA)) +
  geom_histogram() +
  labs(x = "Retornos",
       y = "Frequência",
       title = "WEG: Retornos das Ações") + 
  xlim(-0.3, 0.3) + 
  theme_minimal()
h3c

Histograma: Múltiplos gráficos em um painel

library(patchwork)
painel01 <- h1c / h2c / h3c
painel01

library(patchwork)
painel01 <- (h1c + h2c + h3c) + plot_layout(nrow = 2)
painel01

Densidade Empírica

d1 <- ggplot(carteira, aes(x = VALE)) + geom_density()
d1

Customizando

d1c <- ggplot(carteira, aes(x = VALE)) +
  geom_density() +
  labs(x = "Retornos",
       y = "Densidade",
       title = "Vale: Retornos das Ações") +
  xlim(-0.3, 0.3) + 
  theme_minimal()

d1c

Densidade Empírica

d2 <- ggplot(carteira, aes(x = PETR4.SA)) + geom_density()
d2

Customizando

d2c <- ggplot(carteira, aes(x = PETR4.SA)) +
  geom_density() +
  labs(x = "Retornos",
       y = "Densidade",
       title = "Petrobrás: Retornos das Ações") + 
  xlim(-0.3, 0.3) + 
  theme_minimal()

d2c

Densidade Empírica

d3 <- ggplot(carteira, aes(x = WEGE3.SA)) + geom_density()
d3

Customizando

d3c <- ggplot(carteira, aes(x = WEGE3.SA)) +
  geom_density() +
  labs(x = "Retornos",
       y = "Densidade",
       title = "WEG: Retornos das Ações") +
  xlim(-0.3, 0.3) + 
  theme_minimal()
d3c

Densidade Empírica: Múltiplos gráficos em um painel

library(patchwork)
painel02 <- d1c / d2c / d3c
painel02

Densidade Empírica: Múltiplos gráficos em um painel

painel02 <- (d1c + d2c + d3c) + plot_layout(nrow = 2)
painel02

Histograma com Densidade Empírica

h1_d <- ggplot(carteira, aes(x = VALE)) + 
            geom_histogram(aes(y = ..density..)) +
            geom_density(col = "blue", size = 1.5) + 
            theme_minimal()
h1_d

Visualizando distribuições: Boxplot

b1 <- ggplot(carteira, aes(x = VALE)) + geom_boxplot()
b1

Boxplot: coord_flip() inverte a orientação

b1_inv <- ggplot(carteira, aes(x = VALE)) + geom_boxplot() + coord_flip()
b1_inv

Customizando

b1c <- ggplot(carteira, aes(x = VALE)) +
        geom_boxplot() +
        labs(x = "Retornos",
             y = NULL,
             title = "Vale: Retornos das Ações") +
        xlim(-0.3, 0.3) + 
       theme_minimal()

b1c

Boxplot

b2 <- ggplot(carteira, aes(x = PETR4.SA)) + geom_boxplot()
b2

Customizando

b2c <- ggplot(carteira, aes(x = PETR4.SA)) +
        geom_boxplot() +
        labs(x = "Retornos",
             y = NULL,
             title = "Petrobrás: Retornos das Ações") + 
       xlim(-0.3, 0.3) + 
       theme_minimal()
b2c

Boxplot

b3 <- ggplot(carteira, aes(x = WEGE3.SA)) + geom_boxplot()
b3

Customizando

b3c <- ggplot(carteira, aes(x = WEGE3.SA)) +
       geom_boxplot() +
       labs(x = "Retornos",
            y = NULL,
            title = "WEG: Retornos das Ações") +
       xlim(-0.3, 0.3) + 
       theme_minimal()

b3c

Boxplot: Múltiplos gráficos em um painel

library(patchwork)
painel03 <- b1c / b2c / b3c
painel03

Visualizando distribuições: Gráfico de Barras

Continuando com a usar o sistema de visualização do pacote ggplot2

ggplot(risco_analise, aes(x = q1_1)) + 
  geom_bar() +
  labs(title="Gráfico de Barra Simples",                 
       x="Idade",                          
       y="Frequência (n)") 

Invertendo os eixos usando coord_flip():

ggplot(risco_analise, aes(x = q1_1)) + 
  geom_bar() +
  labs(x="Idade",                          
       y="Frequência (n)") + 
  coord_flip() + 
  theme_minimal()

reordenando os níveis do fator idade:

ggplot(risco_analise, aes(x = fct_rev(q1_1))) + 
  geom_bar() +
  labs(x="Idade",                          
       y="Frequência (n)") + 
  coord_flip() + 
  theme_minimal()

Diferenciando as categorias com cores:

ggplot(risco_analise, aes(x = fct_rev(q1_1), fill = q1_1)) + 
  geom_bar() +
  labs(x= "Idade",                          
       y = "Frequência (n)") + 
  coord_flip() + 
  theme_minimal()

Anotando as barras: porcentagens

risco_anot <- risco_analise |>
  group_by(q1_1) |>
  summarize(n = n()) |>
  mutate(
         pct = n / sum(n),
         lbls = scales::percent(pct)
        )


ggplot(risco_anot, aes(x = q1_1, y = pct, fill = q1_1)) +
  geom_bar(stat = "identity", fill = "steelblue") +
  geom_text(aes(label = lbls),
            vjust = -0.5,
            size = 3) + 
  labs(x = "Idade",
       y = "Frequência (n)") +
  theme_minimal()

Anotando as barras: totais

risco_anot2 <- risco_analise |>
  group_by(q1_1) |>
  summarize(n = n()) |>
  mutate(
         total = n,
         lbls = scales::number(total)
        )


ggplot(risco_anot2, aes(x = q1_1, y = total, fill = q1_1)) +
  geom_bar(stat = "identity", fill = "steelblue") +
  geom_text(aes(label = lbls),
            vjust = -0.5,
            size = 3) + 
  labs(x = "Idade",
       y = "Frequência (n)") +
  theme_minimal()

Covariação: Gráfico de Dispersão

ggplot(data = carteira) +
  geom_point(mapping = aes(x = VALE, y = PETR4.SA))

ggplot(data = carteira) +
  geom_bin2d(mapping = aes(x = VALE, y = PETR4.SA))

ggplot(data = carteira) +
  geom_point(mapping = aes(x = VALE, y = PETR4.SA)) +
  geom_smooth(mapping = aes(x = VALE, y = PETR4.SA), method = "lm", se = FALSE)

ggplot(data = carteira) +
  geom_point(mapping = aes(x = WEGE3.SA, y = PETR4.SA))

ggplot(data = carteira) +
  geom_bin2d(mapping = aes(x = WEGE3.SA, y = PETR4.SA))

ggplot(data = carteira) +
  geom_point(mapping = aes(x = WEGE3.SA, y = PETR4.SA)) +
  geom_smooth(mapping = aes(x = WEGE3.SA, y = PETR4.SA), method = "lm", se = FALSE)

ggplot(data = carteira) +
  geom_point(mapping = aes(x = WEGE3.SA, y = VALE))

ggplot(data = carteira) +
  geom_bin2d(mapping = aes(x = WEGE3.SA, y = VALE))

ggplot(data = carteira) +
  geom_point(mapping = aes(x = WEGE3.SA, y = VALE)) +
  geom_smooth(mapping = aes(x = WEGE3.SA, y = VALE), method = "lm", se = FALSE)

Tudo ao Mesmo Tempo:

library(PerformanceAnalytics)
chart.Correlation(carteira, histogram = TRUE)

Gráficos de Linha para Séries Temporais

Sistema Gerenciador de Séries do Banco Central do Brasil